home *** CD-ROM | disk | FTP | other *** search
/ Apple Reference & Presen…tion Library 2 (Reseller) / Apple R&P Lib Reseller v2.0.iso / 3-Demos / HyperCard Demos / HyperCard In Education / Towers of Hanoi / background_2783.txt < prev    next >
Text File  |  1989-07-14  |  10KB  |  399 lines

  1. -- background: 2783 from stack: in
  2. -- bmap block id: 2216
  3. -- flags: 0000
  4. -- background id: 0
  5. -- name: 
  6. ----- HyperTalk script -----
  7. -- Copyright ¬© 1988 Cincinnati Country Day School.  All rights reserved.
  8.  
  9. -- For information, contact Joseph F. Hofmeister, Computer Coordinator
  10. -- The HyperSchool, Cincinnati Country Day School
  11. -- 6905 Given Road, Cincinnati, Ohio 45243
  12. -- Telephone 513-561-7298  AppleLink K0197
  13.  
  14. on openStack
  15.   if the version < 1.2 then
  16.     answer "This stack needs HyperCard version 1.2."
  17.     set lockMessages to true
  18.     domenu home
  19.   else
  20.     hide message
  21.     reset paint
  22.     initTower
  23.     setTower 2
  24.   end if
  25. end openStack
  26.  
  27. on closeStack
  28.   reset paint
  29. end closeStack
  30.  
  31. on initTower
  32.   global maxDisks, nDisks, yBase, dHeight, xPole, poleTop
  33.   put 7 into maxDisks
  34.   put the number of bkgnd buttons - 7 into nDisks
  35.   put 250 into yBase
  36.   put 20 into dHeight
  37.   put "0,0,0" into xPole
  38.   get round( width of card window / 2 )
  39.   put it - 150 into item 1 of xPole
  40.   put it into item 2 of xPole
  41.   put it + 150 into item 3 of xPole
  42.   put yBase - round( 7.5 * dHeight ) - 4 into poleTop
  43. end initTower
  44.  
  45. on makeBase
  46.   global yBase, dHeight, xPole, poleTop
  47.   set the editBkgnd to true
  48.   choose select tool
  49.   drag from 0,0 to width of card window, height of card window
  50.   doMenu "Clear Picture"
  51.   choose round rect tool
  52.   set the filled to true
  53.   set the pattern to 22
  54.   put poleTop + 4 + round( dHeight / 2 ) into t
  55.   put yBase + dHeight into b
  56.   repeat with i = 1 to 3
  57.     get item i of xPole
  58.     drag from it - 5, t to it + 5, b
  59.   end repeat
  60.   set the pattern to 20
  61.   get yBase + round( dHeight / 2 )
  62.   drag from item 1 of xPole - 90, it to item 3 of xPole + 90, it + round( 1.5 * dHeight )
  63.   reset paint
  64.   choose browse tool
  65. end makeBase
  66.  
  67. on deleteTower
  68.   global nDisks
  69.   choose button tool
  70.   set the editBkgnd to true
  71.   repeat with i = the number of bkgnd buttons down to 8
  72.     if the name of bkgnd button i contains "Disk" then
  73.       click at the loc of bkgnd button i
  74.       doMenu "Clear Button"
  75.     end if
  76.   end repeat
  77.   choose browse tool
  78.   put 0 into nDisks
  79. end deleteTower
  80.  
  81. on makeTower height, dest
  82.   global nDisks, yBase, dHeight, xPole
  83.   global firstPole, stackHeight
  84.   deleteTower
  85.   set the editBkgnd to true
  86.   put height into nDisks
  87.   put dest into firstPole
  88.   put "0,0,0" into stackHeight
  89.   put nDisks into item firstPole of stackHeight
  90.   put item firstPole of xPole into thisPole
  91.   put yBase - dHeight * ( nDisks - 1 ) into yDisk
  92.   put 60 into dWidth
  93.   repeat with i = 1 to nDisks
  94.     doMenu "New Button"
  95.     get "Disk" && i
  96.     set the name of bkgnd button "New Button" to it
  97.     set the width of bkgnd button it to dWidth
  98.     set the height of bkgnd button it to dHeight
  99.     set the loc of bkgnd button it to thisPole, yDisk
  100.     add 10 to dWidth
  101.     add dHeight to yDisk
  102.   end repeat
  103.   choose browse tool
  104.   put 0 into field depth
  105.   put 0 into field moves
  106. end makeTower
  107.  
  108. on setTower dest
  109.   global nDisks, yBase, dHeight, xPole
  110.   global firstPole, stackHeight
  111.   put dest into firstPole
  112.   put "0,0,0" into stackHeight
  113.   put nDisks into item firstPole of stackHeight
  114.   put item firstPole of xPole into thisPole
  115.   put yBase - dHeight * ( nDisks - 1 ) into yDisk
  116.   repeat with i = 1 to nDisks
  117.     get "Disk" && i
  118.     set the loc of bkgnd button it to thisPole, yDisk
  119.     add dHeight to yDisk
  120.   end repeat
  121.   put 0 into field depth
  122.   put 0 into field moves
  123. end setTower
  124.  
  125. on shiftTower dest
  126.   global nDisks, firstPole
  127.   put 0 into field depth
  128.   put 0 into field moves
  129.   choose button tool
  130.   moveTower nDisks, firstPole, dest, 6 - firstPole - dest
  131.   put dest into firstPole
  132.   choose browse tool
  133. end shiftTower
  134.  
  135.  
  136.  
  137. -- part 7 (button)
  138. -- low flags: 00
  139. -- high flags: A004
  140. -- rect: left=151 top=61 right=83 bottom=239
  141. -- title width / last selected line: 0
  142. -- icon id / first selected line: 0 / 0
  143. -- text alignment: 1
  144. -- font id: 0
  145. -- text size: 12
  146. -- style flags: 0
  147. -- line height: 16
  148. -- part name: Set Tower
  149. ----- HyperTalk script -----
  150. on mouseUp
  151.   answer "Disks on which pole?" with "Left" or "Center" or "Right"
  152.   if it = "Right" then
  153.     setTower 3
  154.   else
  155.     if it = "Center" then
  156.       setTower 2
  157.     else
  158.       setTower 1
  159.     end if
  160.   end if
  161. end mouseUp
  162.  
  163.  
  164.  
  165. -- part 8 (button)
  166. -- low flags: 00
  167. -- high flags: A004
  168. -- rect: left=243 top=61 right=83 bottom=331
  169. -- title width / last selected line: 0
  170. -- icon id / first selected line: 0 / 0
  171. -- text alignment: 1
  172. -- font id: 0
  173. -- text size: 12
  174. -- style flags: 0
  175. -- line height: 16
  176. -- part name: Move Tower
  177. ----- HyperTalk script -----
  178. on mouseUp
  179.   answer "Move to which pole?" with "Left" or "Center" or "Right"
  180.   if it = "Right" then
  181.     shiftTower 3
  182.   else
  183.     if it = "Center" then
  184.       shiftTower 2
  185.     else
  186.       shiftTower 1
  187.     end if
  188.   end if
  189. end mouseUp
  190.  
  191.  
  192.  
  193. -- part 9 (button)
  194. -- low flags: 00
  195. -- high flags: A004
  196. -- rect: left=105 top=24 right=57 bottom=407
  197. -- title width / last selected line: 0
  198. -- icon id / first selected line: 0 / 0
  199. -- text alignment: 1
  200. -- font id: 3
  201. -- text size: 18
  202. -- style flags: 2048
  203. -- line height: 24
  204. -- part name: Tower of Hanoi
  205. ----- HyperTalk script -----
  206. on mouseUp
  207.   if the visible of card field Help is true then
  208.     set the visible of card field "Help" to false
  209.   else
  210.     set the visible of card field Author to true
  211.     set the visible of card button OK to true
  212.   end if
  213. end mouseUp
  214.  
  215. -- Answers to the questions posed in the "Help" field:
  216. -- If n is the number of disks in the stack, the maximum depth of
  217. -- recursion is n, and the total number of moves is 2^n - 1.
  218. -- By the way, this means that the Tibetan monks have their work cut
  219. -- out for them with a stack of 100 disks.  Even if they were using
  220. -- a Cray supercomputer, and could make one move per nanosecond,
  221. -- completion of the task would still take about 3000 times the
  222. -- present age of the universe.
  223.  
  224.  
  225. -- part 18 (button)
  226. -- low flags: 00
  227. -- high flags: 0001
  228. -- rect: left=126 top=315 right=339 bottom=161
  229. -- title width / last selected line: 0
  230. -- icon id / first selected line: 25002 / 25002
  231. -- text alignment: 1
  232. -- font id: 0
  233. -- text size: 12
  234. -- style flags: 0
  235. -- line height: 16
  236. -- part name: Help
  237. ----- HyperTalk script -----
  238. on mouseUp
  239.   set the visible of card field Help to not visible of card field Help
  240. end mouseUp
  241.  
  242.  
  243.  
  244. -- part 49 (field)
  245. -- low flags: 01
  246. -- high flags: 0001
  247. -- rect: left=114 top=296 right=311 bottom=229
  248. -- title width / last selected line: 0
  249. -- icon id / first selected line: 0 / 0
  250. -- text alignment: 65535
  251. -- font id: 2
  252. -- text size: 10
  253. -- style flags: 0
  254. -- line height: 13
  255. -- part name: depthLabel
  256.  
  257.  
  258. -- part 50 (field)
  259. -- low flags: 01
  260. -- high flags: 0002
  261. -- rect: left=229 top=296 right=311 bottom=254
  262. -- title width / last selected line: 0
  263. -- icon id / first selected line: 0 / 0
  264. -- text alignment: 1
  265. -- font id: 2
  266. -- text size: 10
  267. -- style flags: 0
  268. -- line height: 13
  269. -- part name: depth
  270.  
  271.  
  272. -- part 52 (field)
  273. -- low flags: 01
  274. -- high flags: 0002
  275. -- rect: left=258 top=296 right=311 bottom=283
  276. -- title width / last selected line: 0
  277. -- icon id / first selected line: 0 / 0
  278. -- text alignment: 1
  279. -- font id: 2
  280. -- text size: 10
  281. -- style flags: 0
  282. -- line height: 13
  283. -- part name: moves
  284.  
  285.  
  286. -- part 53 (field)
  287. -- low flags: 01
  288. -- high flags: 0001
  289. -- rect: left=283 top=296 right=311 bottom=398
  290. -- title width / last selected line: 0
  291. -- icon id / first selected line: 0 / 0
  292. -- text alignment: 0
  293. -- font id: 2
  294. -- text size: 10
  295. -- style flags: 0
  296. -- line height: 13
  297. -- part name: moveLabel
  298.  
  299.  
  300. -- part 60 (button)
  301. -- low flags: 00
  302. -- high flags: A004
  303. -- rect: left=59 top=61 right=83 bottom=147
  304. -- title width / last selected line: 0
  305. -- icon id / first selected line: 0 / 0
  306. -- text alignment: 1
  307. -- font id: 0
  308. -- text size: 12
  309. -- style flags: 0
  310. -- line height: 16
  311. -- part name: Make Tower
  312. ----- HyperTalk script -----
  313. on mouseUp
  314.   global maxDisks
  315.   get -1
  316.   repeat while it < 0 or it > maxDisks
  317.     ask "How many disks (0 -" && maxDisks & ")?"
  318.     if it is empty then exit mouseUp
  319.     get round( it )
  320.   end repeat
  321.   makeTower it, 1
  322. end mouseUp
  323.  
  324.  
  325.  
  326. -- part 61 (button)
  327. -- low flags: 00
  328. -- high flags: A004
  329. -- rect: left=335 top=61 right=83 bottom=453
  330. -- title width / last selected line: 0
  331. -- icon id / first selected line: 0 / 0
  332. -- text alignment: 1
  333. -- font id: 0
  334. -- text size: 12
  335. -- style flags: 0
  336. -- line height: 16
  337. -- part name: See Algorithm
  338. ----- HyperTalk script -----
  339. on mouseUp
  340.   edit script of this stack
  341. end mouseUp
  342.  
  343.  
  344.  
  345. -- part 85 (button)
  346. -- low flags: 00
  347. -- high flags: 8003
  348. -- rect: left=226 top=200 right=220 bottom=286
  349. -- title width / last selected line: 0
  350. -- icon id / first selected line: 0 / 0
  351. -- text alignment: 1
  352. -- font id: 0
  353. -- text size: 12
  354. -- style flags: 0
  355. -- line height: 16
  356. -- part name: Disk 1
  357.  
  358.  
  359. -- part 95 (button)
  360. -- low flags: 00
  361. -- high flags: 8003
  362. -- rect: left=221 top=220 right=240 bottom=291
  363. -- title width / last selected line: 0
  364. -- icon id / first selected line: 0 / 0
  365. -- text alignment: 1
  366. -- font id: 0
  367. -- text size: 12
  368. -- style flags: 0
  369. -- line height: 16
  370. -- part name: Disk 2
  371.  
  372.  
  373. -- part 96 (button)
  374. -- low flags: 00
  375. -- high flags: 8003
  376. -- rect: left=216 top=240 right=260 bottom=296
  377. -- title width / last selected line: 0
  378. -- icon id / first selected line: 0 / 0
  379. -- text alignment: 1
  380. -- font id: 0
  381. -- text size: 12
  382. -- style flags: 0
  383. -- line height: 16
  384. -- part name: Disk 3
  385.  
  386.  
  387. -- part 97 (button)
  388. -- low flags: 00
  389. -- high flags: 8003
  390. -- rect: left=61 top=240 right=260 bottom=151
  391. -- title width / last selected line: 0
  392. -- icon id / first selected line: 0 / 0
  393. -- text alignment: 1
  394. -- font id: 0
  395. -- text size: 12
  396. -- style flags: 0
  397. -- line height: 16
  398. -- part name: Disk 4
  399.